home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Java Primer Plus
/
Java Primer Plus (Waite Group Proess)(1996).iso
/
chapter13
/
javastand.java
< prev
next >
Wrap
Text File
|
1995-12-31
|
6KB
|
253 lines
import java.awt.*;
class javastand {
static public void main(String args[]) {
MyFrame F = new MyFrame();
}
}
class MyFrame extends java.awt.Frame {
static Rectangle DrawSize;
MyWidgets WControls;
MyColors ColorControls;
/* The init of the Applet */
MyFrame() {
DrawSize = bounds();
setLayout(new BorderLayout());
/* Setup the Canvas */
MyCanvas c = new MyCanvas();
add("North", WControls = new MyWidgets(c));
/* Add controls to the bottom of the applet */
add("Center", c);
add("South", ColorControls = new MyColors(c));
pack();
resize(500,200);
show();
ColorControls.enable();
WControls.enable();
}
public boolean handleEvent(Event E) {
if (E.id == Event.WINDOW_DESTROY)
System.exit(0);
return false;
}
}
/* Creating a Canvas Class */
class MyCanvas extends Canvas {
/* The x,y coordinates, height & width */
int drawX,drawY,drawH,drawW;
String mt;
/* Set these to make the code more readable */
final int _RESET = 0; //reset drawing field
final int _RECTANGLE = 1;
final int _FILLEDRECT = 2;
final int _CIRCLE = 3;
final int _FILLEDCIRC = 4;
final int _LINE = 5;
final int _TEXT = 6;
/* current drawing color */
Color drawCol = Color.black;
/* current drawing mode */
int drawAct = _LINE;
/* The following is the main drawing routine */
/* of the applet. There is no persistance of */
/* drawn objects, so if the appletis obscured */
/* and then brought front again, only the */
/* most recently drawn object will be redrawn */
public void paint(Graphics g) {
g.setColor(Color.lightGray);
Rectangle r = bounds();
if (drawAct == _RESET)
g.fillRect(0,0,r.width,r.height);
else {
g.fillRect(0,0,80,15);
g.setColor(Color.black);
g.drawRect(0,0,80,15);
}
g.setColor(Color.black);
g.drawString("JavaDraw",r.width/2-20,15);
g.drawRect(0,0,r.width-1,r.height-1);
g.setColor(drawCol);
/* perform the selected drawing routine */
switch (drawAct) {
case _RECTANGLE : g.drawRect(drawX,drawY,drawW, drawH);
g.drawString("Rectangle",0,10);
break;
case _FILLEDRECT : g.fillRect(drawX,drawY,drawW, drawH);
g.drawString("Fill Rectangle",0,10);
break;
case _CIRCLE : g.drawOval(drawX,drawY,drawW,drawH);
g.drawString("Circle",0,10);
break;
case _LINE : g.drawLine(drawX,drawY,drawW,drawH);
g.drawString("Line",0,10);
break;
case _FILLEDCIRC : g.fillOval(drawX,drawY,drawW,drawH);
g.drawString("fill Circle",0,10);
break;
case _TEXT : g.drawString(mt,drawX,drawY);
g.drawString(mt,0,10);
break;
}
}
/* standard overridden update */
public void update(Graphics g) { paint(g); }
/* set dimensions to zero */
public void redraw() {
drawX = drawY = drawW = drawH = 0;
repaint();
}
/* Mouse Handling */
public boolean mouseDown(Event e, int x, int y) {
drawX=x;
drawY=y;
return true;
}
public boolean mouseUp(Event e, int x, int y) {
if(drawAct == _LINE) {
drawW=x;
drawH=y;
repaint();
return true;
}
/* Not a line, extract the coordinates */
drawW = java.lang.Math.abs(x - drawX);
if (x < drawX) drawX = x;
drawH = java.lang.Math.abs(y - drawY);
if (y < drawY) drawY = y;
repaint(); //draw our new object
return true;
}
}
/* Setup the Widgets */
class MyWidgets extends Panel {
MyCanvas canvas;
TextField mt;
public MyWidgets(MyCanvas canvas) {
this.canvas = canvas;
add(mt = new TextField("",10));
add(new Button("Text"));
add(new Button("Line"));
add(new Button("Rect"));
add(new Button("FillRect"));
add(new Button("Circle"));
add(new Button("FillCircle"));
add(new Button("Reset"));
}
/* grab events and look for button events */
public boolean action(Event ev, Object arg) {
if(ev.target instanceof Button) {
canvas.drawAct = whichact((String)arg);
if (canvas.drawAct == canvas._TEXT)
canvas.mt = mt.getText();
if (canvas.drawAct == canvas._RESET)
canvas.repaint();
canvas.redraw();
return true;
}
return false;
}
private int whichact(String T) {
if (T.equals("Text")) return canvas._TEXT;
if (T.equals("Reset")) return canvas._RESET;
if (T.equals("Line")) return canvas._LINE;
if (T.equals("Rect")) return canvas._RECTANGLE;
if (T.equals("FillRect")) return canvas._FILLEDRECT;
if (T.equals("Circle")) return canvas._CIRCLE;
if (T.equals("FillCircle")) return canvas._FILLEDCIRC;
return -1;
}
}
class MyColors extends Panel {
MyCanvas canvas; //canvas that calls this
public MyColors(MyCanvas canvas) {
this.canvas = canvas; //set canvas to calling class
add(new Button("Blue"));
add(new Button("Red"));
add(new Button("Yellow"));
add(new Button("Black"));
add(new Button("Green"));
add(new Button("Gray"));
}
public boolean action(Event ev, Object arg) {
if(ev.target instanceof Button) {
String label = (String)arg;
canvas.drawCol = whichcol((String)arg);
canvas.redraw();
//calls paint for new color to appear in
//tool selection field
return true;
}
return false;
}
private Color whichcol(String T) {
if (T.equals("Blue")) return Color.blue;
if (T.equals("Black")) return Color.black;
if (T.equals("Yellow")) return Color.yellow;
if (T.equals("Red")) return Color.red;
if (T.equals("Green")) return Color.green;
if (T.equals("Gray")) return Color.gray;
return null;
}
}